#! /usr/bin/perl -lw

## by huanlf at google.com

use strict;
use Getopt::Std;

my %opt;
my %seen;
my $ip;

getopts( 'ug', \%opt ) or die "$0 [-gu] [<] [file]\n";

my $ipregex = qr{
    (?<![\d\.]) ## 环视，$1左侧不是数字或.
    (  ## 捕获IP到$1
      (?: 2[0-4]\d | 25[0-5] | [01]?\d\d? )  ## 第一组点分十进制
      \.
      (?: 2[0-4]\d | 25[0-5] | [01]?\d\d? )  ## 第二组点分十进制
      \.
      (?: 2[0-4]\d | 25[0-5] | [01]?\d\d? )  ## 第三组点分十进制
      \.
      (?: 2[0-4]\d | 25[0-5] | [01]?\d\d? )  ## 第四组点分十进制
    )   ## $1结束
    (?![\d\.]) ## 环视，$1右侧不是数字或.
}x;

while (<>) {
    if ( $opt{g} ) {
        while ( m{$ipregex}g ) {
            $ip = $1;            
            if ( $opt{u} ) {
                print $ip unless $seen{$ip}++;
            }
            else {
                print $ip;
            }
        }
    }
    else {
        if ( m{$ipregex} ) {
            $ip = $1;            
            if ( $opt{u} ) {
                print $ip unless $seen{$ip}++;
            }
            else {
                print $ip;
            }
        }
    }
}

